Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

362
Vistas
¿Cómo funciona "for ( ; *p; ++p) *p = tolower(*p);" trabajo en c?

Soy bastante nuevo en la programación y me preguntaba por qué este código:

 for ( ; *p; ++p) *p = tolower(*p);

funciona para reducir un caso de cadena en c, cuando p apunta a una cadena?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En general, este código:

 for ( ; *p; ++p) *p = tolower(*p);

no

” funciona para bajar un caso de cadena en c, cuando p apunta a una cadena?

Funciona para ASCII puro, pero dado que char generalmente es un tipo con signo, y dado que tolower requiere un argumento no negativo (excepto el valor especial EOF ), la pieza en general tendrá un comportamiento indefinido.

Para evitar eso, envíe el argumento a unsigned char , así:

 for ( ; *p; ++p) *p = tolower( (unsigned char)*p );

Ahora puede funcionar para codificaciones de un solo byte como Latin-1, siempre que haya configurado la configuración regional correcta a través de setlocale , por ejemplo, setlocale( LC_ALL, "" ); . Sin embargo, tenga en cuenta que la codificación UTF-8 muy común no es un solo byte por carácter. Para tratar con texto UTF-8, puede convertirlo en una cadena ancha y en minúsculas.


Detalles:

  • *p es una expresión que denota el objeto al que apunta p , presumiblemente un char .

  • Como condición de continuación para el ciclo for , cualquier valor de char distinto de cero que denota *p , tiene el efecto de True lógico, mientras que el valor de char cero al final de la cadena tiene el efecto de False lógico, finalizando el ciclo.

  • ++p avanza el puntero para apuntar al siguiente char .

over 4 years ago · Santiago Trujillo Denunciar

0

Para desmarcar, supongamos que p es un puntero a un char y justo antes del bucle for , apunta al primer carácter de una cadena.

En C, las cadenas generalmente se modelan mediante un conjunto de valores de caracteres char con un 0 final agregado al final que actúa como el terminador nulo .

*p se evaluará como 0 una vez que se alcance el terminador nulo de la cadena. Entonces el bucle for saldrá. (La segunda expresión en el bucle for actúa como prueba de terminación).

++p avanza al siguiente carácter de la cadena.

*p = tolower(*p) establece ese carácter en minúsculas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda